import axios, { AxiosResponse, InternalAxiosRequestConfig } from "axios";
import { ElMessage } from "element-plus";
import { GET_TOKEN } from "@/utils/token.ts";

// 创建axois 实例
const request = axios.create({
  baseURL: import.meta.env.VITE_APP_BASE_API,
  timeout: 5000,
});

//请求拦截
request.interceptors.request.use(
  // 配置设置
  (config: InternalAxiosRequestConfig) => {
    // 如果token不为空 加载在请求头里
    const token: string = GET_TOKEN();
    if (token != "") {
      config.headers["token"] = GET_TOKEN();
    }

    // 如请求头+token
    return config;
  },
  // 错误策略
  (error) => {
    return error;
  },
);

//响应拦截
request.interceptors.response.use(
  // 配置设置
  (response: AxiosResponse) => {
    // 如请求头+token

    return response.data;
  },
  // 错误策略
  (error) => {
    //处理网络错误
    let msg = "";
    const status = error.response.status;
    switch (status) {
      case 401:
        msg = "token过期";
        break;
      case 403:
        msg = "无权访问";
        break;
      case 404:
        msg = "请求地址错误";
        break;
      case 500:
        msg = "服务器出现问题";
        break;
      default:
        msg = "无网络";
    }

    // 消息弹窗提示
    ElMessage({
      type: "error",
      message: msg,
    });
    return Promise.reject(error);
  },
);

export default request;
